package com.lancoo.ccas52.util;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.lancoo.ccas52.config.MybatisRedisCache;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @ClassName CodeGenerator
 * @Description https://baomidou.com/pages/981406/
 * @Author quin
 * @Date 2022/12/20 14:17
 */
public class CodeGenerator {
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + "：");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "！");
    }


    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/lg_ccas52_quin?tinyInt1isBit=false&useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai","root","LancooECP")
                .globalConfig(builder -> {
                    builder
                            // （重要）配置输出的文件夹，springboot项目可以使用如下方式
                            .outputDir(System.getProperty("user.dir") + "/src/main/java")
                            // （重要）时间类型，看你喜欢用sql包中的Date、
                            // util包中的Date还是更新的LocalDateTime
                            .dateType(DateType.TIME_PACK)
                            // 配置生成文件中的author
                            .author("quin.song")
                            // 是否启用kotlin模式
//                            .enableKotlin()
                            // 是否启用swagger，比如启用后会在entity中自动生成字段ApiModel注释等等
                            .enableSwagger()
                            // 注释日期的格式
                            .commentDate("yyyy-MM-dd")
                            .disableOpenDir()
                            .build();
                })
                .packageConfig(builder -> {
                    builder.parent("com.lancoo.ccas52")// 设置父包名
                            .controller("deleted")
                            .pathInfo(Collections.singletonMap(OutputFile.xml,System.getProperty("user.dir")+"/src/main/resources/mapper/"));

                })
                .strategyConfig(builder -> {
                    builder
                            .addInclude(scanner("表名，多个英文逗号分割").split(","))
                            .entityBuilder()
                            // （重要）主键模式，这里设置自动模式，配合mysql的自增主键
                            .idType(IdType.AUTO)
                            .enableLombok()
                            .logicDeleteColumnName("deleted")
                            .enableChainModel()
                            .enableFileOverride()
                            .controllerBuilder()
                            .enableRestStyle()
                            .serviceBuilder()
                            .formatServiceFileName("%sService")
                            .mapperBuilder()
                            .enableBaseResultMap()
                            .enableBaseColumnList()
                            .enableFileOverride()
                            .cache(MybatisRedisCache.class)
                            .build();
                })
                // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                .templateConfig(builder ->{
                    builder.mapper("/templates/mapper.java");
                })
                .execute();

    }

}
